package com.ads.tpgrupo4.server.service.administracionClientes;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import com.ads.tpgrupo4.domain.cpr.core.Status;
import com.ads.tpgrupo4.server.utils.Assertions;
import com.ads.tpgrupo4.server.xml.XmlSource;

public class OperacionSobreCliente {

	private static final String ALTA_CLIENTE = "AltaCliente";
	private static final String MODIFICACION_CLIENTE = "ModificacionCliente";
	private static final String BAJA_CLIENTE = "BajaCliente";
	private static final String CUIL = "Cuil";
	private static final String ACTIVO = "Activo";
	private static final String ID_ODV = "IdOdv";
	private static final String RAZON_SOCIAL = "RazonSocial";
	private static final String CONDICION_IVA = "CondicionIva";
	private static final String CONDICION_IVA_VALOR_RESPONSABLE = "responsable";
	private static final String TRUE = "true";
	
	private boolean esAlta;
	private boolean esModificacion;
	private boolean esBajaLogica;
	
	private String idOdv;
	private String cuil;
	private String razonSocial;
	private Boolean ivaExento;
	private Status status;
	
	public OperacionSobreCliente(final XmlSource operacionXmlSource) {

		this.getDetailsFrom(operacionXmlSource);
	}

	private void getDetailsFrom(final XmlSource operacionXmlSource) {
		
		final Document document = operacionXmlSource.getDocument();
		
		final Element nodoOperacion = document.getDocumentElement();
		final String nombreOperacion = nodoOperacion.getTagName();
		
		this.esAlta = ALTA_CLIENTE.equals(nombreOperacion);
		this.esBajaLogica = BAJA_CLIENTE.equals(nombreOperacion);
		this.esModificacion = MODIFICACION_CLIENTE.equals(nombreOperacion);

		final NodeList elementIdOdv = document.getElementsByTagName(ID_ODV);
		final String idOdv = elementIdOdv.getLength() != 0 ? elementIdOdv.item(0).getTextContent() : null;
		Assertions.notNullOrEmpty(idOdv, "Debe proporcionar un valor de IdOdv, para poder asociar al cliente a una oficina de venta");
		
		final NodeList elementCuilProveedor = document.getElementsByTagName(CUIL);
		final String cuil = elementCuilProveedor.getLength() != 0 ? elementCuilProveedor.item(0).getTextContent() : null;
		
		final NodeList elementRazonSocialProveedor = document.getElementsByTagName(RAZON_SOCIAL);
		final String razonSocial = elementRazonSocialProveedor.getLength() != 0 ? elementRazonSocialProveedor.item(0).getTextContent() : null;
		
		final NodeList elementoActivo = document.getElementsByTagName(ACTIVO);
		final String activo = elementoActivo.getLength() != 0 ? elementoActivo.item(0).getTextContent() : null;
		final boolean estaActivo = TRUE.equalsIgnoreCase(activo);
		
		final NodeList elementCondicionIva = document.getElementsByTagName(CONDICION_IVA);
		boolean ivaExento = elementCondicionIva.getLength() != 0 ? !CONDICION_IVA_VALOR_RESPONSABLE.equalsIgnoreCase(elementCondicionIva.item(0).getTextContent()) : false;
		
		this.idOdv = idOdv;
		this.cuil = cuil;
		this.razonSocial = razonSocial;
		this.ivaExento = ivaExento;
		this.status = estaActivo ? Status.ACTIVE : Status.INACTIVE;
	}

	public boolean esAlta() {
		return esAlta;
	}

	public boolean esModificacion() {
		return esModificacion;
	}

	public boolean esBajaLogica() {
		return esBajaLogica;
	}
	
	public String getIdOdv() {
		return idOdv;
	}
	
	public String getCuil() {
		return cuil;
	}
	
	public String getRazonSocial() {
		return razonSocial;
	}
	
	public Status getStatus() {
		return status;
	}
	
	public Boolean getIvaExento() {
		return ivaExento;
	}
	
}
